package manong.serviceimpl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import manong.constant.ServerResponse;
import manong.beans.Arrange;
import manong.beans.ArrangeQuery;
import manong.beans.ClassesQuery;
import manong.beans.CourseQuery;
import manong.mapper.ArrangeMapper;
import manong.mapper.ClassesMapper;
import manong.mapper.CourseMapper;
import manong.service.IArrangeService;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class ArrangeServiceImpl implements IArrangeService {
    @Autowired
    private ArrangeMapper arrangeMapper;

    @Autowired
    private ClassesMapper classesMapper;

    @Autowired
    private CourseMapper courseMapper;

    @Override
    public ServerResponse<String> add(Arrange arrange) {
        String classNames = arrange.getClassName();//获取当前的课程名称--》已封装好对象，前端传来参数，需要从对象里取出来班级名称
        String[] split = classNames.split("_");//班级是整体无下划线
        
        
        ArrangeQuery query = new ArrangeQuery();//创建查询条件对象，用于查询数据
        ArrangeQuery.Criteria criteria = query.createCriteria();
        criteria.andCourseIdEqualTo(arrange.getCourseId())
                .andSemeIdEqualTo(arrange.getSemeId());
        int number = 0;//课程是否可以正常上--》设置的一个status，默认0
        for (String s : split){//将结果累加到某个字段
            criteria.andClassNameEqualTo(s);
            number+=Integer.valueOf(classesMapper.selectOneByExample(new ClassesQuery()).getClassNumber());
        }

        query.setDistinct(true);//健壮性查询，判断当前是否已经选了当前已经选择的课程
        Arrange arrange2 = arrangeMapper.selectOneByExample(query);//查询出来

        if (arrange2 !=  null) {//进行判断--》判断当前此课程是否已经分配给了当前班级，如果分配了就不允许再次分配
           return ServerResponse.createByErrorMessage("班级："+arrange2.getClassName()+" 课程："+arrange2.getCourseName()+" 已经存在分配");
        }
        
        //构建数据
        arrange.setStatu(number);  //未分配进行分配
        CourseQuery query1 = new CourseQuery();
        query1.createCriteria().andIdEqualTo(arrange.getCourseId());
        arrange.setSrd(courseMapper.selectOneByExample(query1).getStatu());//设置值
        int count = arrangeMapper.insertSelective(arrange);//插入数据库，返回成功或者失败
        if (count == 0) {
            return ServerResponse.createByErrorMessage("分配失败");
        }
        return ServerResponse.createBySuccessMessage("分配成功");
    }
    //自己的总结和理解：
    //从前端数据传到一个对象，取值进行判断合法-》是否已经选择，如果没有选择就进行分配 ，如果选择向前端提醒已经分配了此课
    //没有选择就在下面进行一个完整性的划分，分好以后，放到数据库，返回给前端----》》》》虽然当前课已经划分给班级了，但是班级没有排课
    //
//00000000调课：点击调课--》调整到哪个课--》将数据查出来--》进行一个空教室的判断，即进行一次空教室查询---》查询成功，将空的教室给分配过去，前端进行空教室查询的校验
    @Override
    public ServerResponse<String> del(Integer id) {
        int count = arrangeMapper.deleteByPrimaryKey(id);
        if (count > 0) {
            return ServerResponse.createBySuccessMessage("删除成功");
        }
        return ServerResponse.createByErrorMessage("删除失败");
    }

    @Override
    public ServerResponse<String> update(Arrange arrange) {
        Arrange a = arrangeMapper.selectByPrimaryKey(arrange.getId());
        //todo  到底怎么修改？ 目前不让他修改

        int count = arrangeMapper.updateByPrimaryKeySelective(a);
        if (count > 0) {
            return ServerResponse.createBySuccessMessage("更新成功");
        }
        return ServerResponse.createByErrorMessage("更新失败");
    }

    @Override
    public ServerResponse<Arrange> find(Integer id) {
        return ServerResponse.createBySuccess(arrangeMapper.selectByPrimaryKey(id));
    }

    @Override
    public ServerResponse<PageInfo<Arrange>> findAll(Integer pageNum, Integer pageSize) {
        ArrangeQuery query = new ArrangeQuery();
        PageHelper.startPage(pageNum, pageSize);
        List<Arrange> list = arrangeMapper.selectByExampleWithRowbounds(query, new RowBounds((pageNum - 1) * 10, pageSize));
        PageInfo<Arrange> pageInfo = new PageInfo<>(list);
        pageInfo.setTotal(arrangeMapper.countByExample(query));
        return ServerResponse.createBySuccess(pageInfo);
    }
}
